在上一篇我們知道了有哪些message格式可以使用,現在我們要來做一個自己的message啦!
首先要先去修改beginner_tutorials裡面的package.xml檔和CMakeList.txt檔設定,讓他可以幫我們建立自定義的msg檔案:
package.xml:message用的,另一個是執行的時候用的,我想看英文名稱應該蠻清楚的才對 XD <build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
CMakeList.txt:message用的相依模組,在find_package底下新增一個message_generation,所以看起來會長這樣:find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
並且在catkin_package底下將CATKIN_DEPENDS的註解打開,在後面新增一個message_runtime,所以看起來會長這樣:
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES beginner_tutorials
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
# DEPENDS system_lib
)
其他部分ROS的CMakeList已經幫我們寫好了,只是需要把註解拿掉而已,所以要把以下幾行的註解拿掉:
generate_messages(
DEPENDENCIES
std_msgs
)
上面就是基本設定啦! 接著我們就可以開始製作自己的message囉!
ROS幫忙建立的message檔案都需要放在/msg的資料夾裡面,所以我們要在beginner_tutorials內自己創一個/msg的資料夾,並把自己定義的.msg檔放在裡面:
$ roscd beginner_tutorials
$ mkdir msg
$ cd msg
$ vim my_msg.msg
我在這裡創了一個自己定義的msg檔,也就是my_msg,裡面我想模擬發文的時候,應該要有標題跟內文,還有文章的id,所以格式定義如下:
int64 id
string title
string content
設定好以後,接著回去編輯package的CMakeList.txt,將這個檔案加入編譯,建立的方法其實也寫好了,只要找到add_message_files的註解並拿掉就好了:
# add_message_files(
# FILES
# Message1.msg
# Message2.msg
# )
其中的Message1.msg和Message2.msg只是範例說明,並沒有這兩個檔案,所以在解開註解的時候要把這兩行刪掉,不然在make的時候會找不到這兩個檔案而出錯喔!
add_message_files(
FILES
my_msg.msg
)
這樣就完成設定了! 接下來只要回去執行catkin_make,就可以成功建立這個新的message格式囉!

在建立的時候可以看到,catkin_make幫我們建立了許多不同種格式的my_msg,負責供給不同語言使用,有js、c++、python等等不同的版本,明天我們就來使用這個新的message格式傳遞資訊吧!